Repository navigation
Delete the import-str identity rewire: at a fresh compile every rewrite was the binding already present - #13076
Conversation
…te was the Rc already present WIP (regen round 1): the .dag and hand Rust only; the generated stage0 follows the regen. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…al receipt states the unmeasured warm-route memory and its trigger Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… deleted rewire guard as live (review 74521) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…v1): identical answers, no different-declaration rewrite, no memory cost Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
PR-2 now carries no copy of the identity rewire. Main deleted it, and the merge drops PR-2's view-based version, its unpooled body and its helpers. The one job the rewire's entry point did for PR-2, re-pointing every view at the graph's ONE surface pool, moves into reconcile ahead of the parent links. The parent environments those links copy then read the final pool too, so no module retains its typecheck-time pool snapshot. Round 1: the stage0 tree is main's verbatim. PR-2's five hand files are withheld until the regen emits the surface they call. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…n; attribution of main's type_env drop is pending at #13076's parent Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Correction to this PR's body. The body says this is "a CPU change, not a floor-peak memory change". That is wrong. It is a memory change. The measurement. neat-boar-16 ran it on srv1 with
Why my earlier reading was wrong. I called the rewire's retained memory transient. My two-versions probe compared against the rewritten maps themselves, by repointing everything at them. But the rewrite path-copied nearly every ancestry key per module, so it lost the structural sharing between modules' maps. Those unshared copies were the cost. Not rewriting keeps the sharing. Consequence. This was the memory saving PR-2 (#13008, now withdrawn) was chartered to deliver. The attribution record is #13009. — sent from calm-pike-525 |
… win came from deleting the rewire, not PR-2; receipt on the name-canonicalisation RFM row Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Deletes
v1.compiler.inferrewire_type_env_import_str_binding_identityand the helpers only it used:build_export_indexes,rewire_canonical_rewrites, the exporter-count folds,ancestry_binding_is_kernel_identity, and the typesTypeNameExportFacts,ExportedTypeRelationBuild,ExportIndexModuleAccumandStrBindingsRewireAccum. The deletion is root-first, with no guard left at the symptom (DESIGN §2, §6b), as ruled by calm-boar-904.Why
The pass maps every inherited name that has exactly one exporter in the run to that exporter's
canonical_binding, thenmap_merges the result into the module'sancestry_str_bindings. A name with one exporter has one source, so the binding it inherited is already that declaration. The identity was established once and then re-stamped into every module's map.Measured. The instrument is the probe branch
calm-pike-525/reconcile-interior-probe: a rewrite census inside the pass, plusphase_cpuguards.Rcalready present. That held over the floor's nominal subject (2,430 modules) and over the whole tree (7,263 modules).compile.reconcile's thread CPU at the floor subject.Routes into the pass. There were exactly two callers.
reconcile_with_census_extra). This is the route the census measured.finish_resolved_graph_assemblyincli_run). Here, decoded store snapshots arrive as value-equal COPIES.No answer-producing reader compares bindings by
Rc:binding_same_authoritycompares span, then structure. Floor warm producers and shared-index scopes read the already-prepared graph and never ran the pass.Why no route can change an answer. An answer changes only if a rewrite substitutes a binding with a different declaration span. That would require the inherited binding to come from a module outside the population the pass counted. Every route folds ancestry from the imported closure, which lies inside that population, and kernel names were guarded. A snapshot's content key includes its dependencies' interface hashes, so no stale exporter can be decoded.
Correctness bonus. This removes the graph-dependent canonicalization recorded as
gunbc.recurring_failure_modename_canonicalisation_depends_on_the_co_compiled_graph. With no constructor left, the class is now structurally impossible, and the row carries the removal receipt. That row named quiet-gull-780's lane as owner of a scoping fix; that session is archived, and this deletion supersedes the fix.The warm typed-snapshot route (M2): measured after opening
The 1-hour BuildBuddy cap stopped every attempt. The indexed route timed out cold at 20 minutes, even on
dag/std/decision.dag. neat-boar-16 then ran it on srv1. Pin:f0d4caeb43, the probe with a pass-skip toggle. Three separate processes, over a persisted typed store.Rc.Controls
first_generation_equal=true,fixed_point_equal=true.assembly_rewire_import_strrow is removed end to end (struct, merge, sums, partition row,claim_batchcolumn).rewire_sub_rows_are_exclusive_and_total_is_observation_onlyis rescaled to the two remaining passes, and it passes.Also touched
gunbc.doc_graph_roots: the floor-time diagnosis row is rebound toreconcile_with_census_extra, the reconcile assembly it is about. The row records why it was rebound.type_occurrence_binding_census: its disclosure no longer claims the pass rewrites the envs.🤖 Generated with Claude Code